import $ from "jquery";
import jwt_decpde from "jwt-decode"

const ModuleUser = {
    state:{
        id:"",
        username:"",
        photo:"",
        followerCount:0,
        access:"", // 令牌
        refresh:"", // 刷新令牌
        is_login: false, //是否登录
    },
    getters:{

    },
    mutations:{ // 将下面的 resp 中的数据更新到state中
        updateUser(state, user) { // 第二个参数为自己定义的参数
            state.id = user.id;
            state.username = user.username;
            state.photo = user.photo;
            state.followerCount = user.followerCount;
            state.access = user.access;
            state.refresh = user.refresh;
            state.is_login = user.is_login;
        },

        updateAccess(state, access) {
            state.access = access;
        },

        logout(state) {
        state.id = "";
        state.username = "";
        state.photo = "";
        state.followerCount = 0;
        state.access = "";
        state.refresh = "";
        state.is_login = false;
        }
    },
    actions:{
        login(context, data) { // 字典函数的简写方式, context为传入的api, data为自己传入的参数, 
            $.ajax({
                url:"https://app165.acapp.acwing.com.cn/api/token/",//传入api
                type:"POST",
                data: {
                    username:data.username, // 从LoginView传入的函数
                    password:data.password,
                },
                
                success(resp) { // 从api中获取的数据
                    const {access, refresh} = resp; // 将resp解析为access, refresh, 多余的自动补充
                    const access_obj = jwt_decpde(access); // 对access进行解码

                    setInterval (() => { // 每隔5分钟刷新一次防止access过期
                        $.ajax({
                            url: "https://app165.acapp.acwing.com.cn/api/token/refresh/",
                            type: "POST",
                            data: {
                                refresh, // data中为自己输入的参数原型为refresh: refresh;
                            },

                            success(resp) {
                                context.commit('updateAccess', resp.access); // 执行updateAccess函数，并且传入参数
                            }
                        })
                    }, 1000 * 4.5 * 60)
                    $.ajax({
                        url:"https://app165.acapp.acwing.com.cn/myspace/getinfo/", //根据用户ID获取用户信息
                        type:"GET",
                        data: { // 需要传入的参数
                            user_id: access_obj.user_id, //根据用户ID获取用户信息
                        },
                        headers:{ // jwt验证
                            'Authorization': "Bearer " + access,
                        },

                        success(resp) {// 解码后的对象即通过用户ID获取的用户信息
                            context.commit("updateUser", { // 调用updateUser函数
                                ...resp, //解析resp, 将username等赋值给status
                                access:access,
                                refresh: refresh,
                                is_login: true,
                            });
                            data.success();

                        },
                    })
                },

                error(){
                    data.error();
                }
            })
        }
    },
    modules:{
    }
};

export default ModuleUser;